using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;
using GarageGames.Torque.Core;



namespace GarageGames.Torque.T3D.RigidCollision
{
    public struct RigidState
    {

        #region Public properties, operators, constants, and enums

        // Core state variables
        public Vector3 LinearPosition;
        public Vector3 LinearMomentum;
        public Quaternion AngularPosition;
        public Vector3 AngularMomentum;

        // Dependent variables
        public Vector3 LinearVelocity;
        public Vector3 AngularVelocity;

        public Matrix InverseWorldInertia;
        public Vector3 WorldCenterOfMass;

        #endregion
    }



    public struct RigidDerivatives
    {

        #region Public properties, operators, constants, and enums

        // Derivatives of core state variables
        public Vector3 Velocity;
        public Vector3 Force;
        public Vector3 Torque;
        public Quaternion QuaternionDerivative;

        #endregion
    }



    public struct RigidMaterial
    {

        #region Public properties, operators, constants, and enums

        public float Restitution;
        public float KineticFriction;
        public float StaticFriction;

        #endregion
    }



    public struct RigidProperties
    {

        #region Public properties, operators, constants, and enums

        public Vector3 CenterOfMass;
        public float InverseMass;
        public Matrix InverseObjectInertia;

        public float GravityScale;
        public float LinearDrag;
        public float AngularDrag;
        public Vector3 ExternalForce;
        public Vector3 ExternalTorque;

        #endregion
    }
}

